﻿using System;
using System.Threading;

class AlarmClock
{
    // 定义 Tick 和 Alarm 事件  
    public event EventHandler Tick;
    public event EventHandler Alarm;

    // 定义闹钟的时间  
    private DateTime alarmTime;

    public void SetAlarm(DateTime time)
    {
        alarmTime = time;
    }

    // 模拟闹钟走时的过程  
    public void Start()
    {
        while (true)
        {
            // 每秒触发 Tick 事件
            // 在闹钟设定时间触发Alarm事件
            Thread.Sleep(1000);

            // 检查当前时间是否与设置的闹钟时间相同  
            if (DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") == alarmTime.ToString("yyyy-MM-dd HH:mm:ss"))
            {
                Alarm(this, EventArgs.Empty);
            }
            else
            {
                Tick(this, EventArgs.Empty);
            }
        }
    }

}

class Program
{
    static void Main(string[] args)
    {
        AlarmClock alarmClock = new AlarmClock();

        // 订阅 Tick 事件  
        alarmClock.Tick += (sender, e) =>
        {
            Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " - Tick...");
        };

        // 订阅 Alarm 事件  
        alarmClock.Alarm += (sender, e) =>
        {
            Console.WriteLine( DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "- The alarm clock is ringing" );
        };

        Console.WriteLine("请输入设置闹钟的时间（格式 yyyy-MM-dd HH:mm:ss）：");
        string inputTime = Console.ReadLine();

        // 设置闹钟时间  
        try
        {
            DateTime alarmTime = DateTime.Parse(inputTime);
            // 将闹钟设置为用户输入的时间  
            alarmClock.SetAlarm(alarmTime);
        }
        catch (FormatException)
        {
            Console.WriteLine("输入的时间格式不正确，请使用 yyyy-MM-dd HH:mm:ss 格式。");
            return;
        }

        Console.WriteLine("闹钟已设置，等待响铃...");
        // 启动闹钟  
        alarmClock.Start();
    }
}